package com.cuc.platform.core.componet.security.dao;

import java.util.List;
import java.util.Map;

import org.springframework.dao.DataAccessException;

import com.cuc.platform.core.componet.security.domain.SecurityUser;

/**
 * @author peepul
 * 
 * 账号DAO访问接口
 * 
 * 直接登记此接口为mapper文件
 * 
 * @see com.cuc.platform.core.componet.security.dao.mybatis.mapper.SecurityUser.xml
 */
public interface SecurityUserDao {
	
	/**
	 * 取所有账号对象
	 * 
	 * @return SecurityUser List
	 */
	public List<SecurityUser> getAllUsers();

	/**
	 * 根据主标识获取指定的SecurityUser对象
	 * 
	 * @param id
	 * @return
	 * @throws Exception
	 */
	public SecurityUser getUserById(Long id);

	/**
	 * 根据登录账号获取用户信息
	 * 
	 * @param userName
	 * @return SecurityUser
	 */
	public SecurityUser getUserByLoginName(String userName);
	
	/**
	 * 获取带角色的User对象
	 * 
	 * @param userName
	 * @return SecurityUser
	 */
	public List<Map<String, Object>> getUserWithRoles(String userName);
	
	/**
	 * 新增用户对象
	 * 
	 * @param user
	 */
	public void insertUser(SecurityUser user) throws DataAccessException;
	
	/**
	 * 更新用户对象
	 * 
	 * @param user
	 * @throws DataAccessException
	 */
	public void updateUser(SecurityUser user) throws DataAccessException;
	
	/**
	 * 根据id删除user对象
	 * 
	 * 注：删除成功返回值为1，如没找到要删除的数据返回0，如果删除出错，则产生异常
	 * @param id
	 */
	public int delUserById(Long id) throws DataAccessException;	
	
	/**
	 * 更改账号的状态标志
	 * 
	 * 用到的实际参数：1、id
	 * 				  2、status
	 * 					  	可用：1 
	 * 					  	不可用：0
	 * 
	 * @throws DataAccessException
	 */
	public void updateUserStatus(SecurityUser user) throws DataAccessException;
	
	/**
	 * 根据user id，查找所有的角色数据，其中角色已经和用户有关联的，用户对象id属性不为空，否则为空。
	 * 
	 * @param userId
	 * @return List<SecurityUser>
	 */
	public List<SecurityUser> viewRoleswithUsers(Long userId);
	
	/**
	 * 根据userId删除ss_user_role中已有的关联关系
	 * 
	 * @param userId
	 */
	public void delUserRoleUnions(Long userId) throws DataAccessException;
	
	/**
	 * 保存用户与角色的关联关系。往ss_user_role中保存关联数据
	 * 
	 * @param map
	 */
	public void saveUserRoleUnions(Map<String, Long> map);	
}
